書評「Kubernetes完全ガイド」Kubernetesを学ぶ全ての人にオススメしたい
「Kubernetes学ぼう!学びたい… なんかどこから学べば良いのかぜんぜんわからん…」
アプリケーション実装環境として、今や猫も杓子もKubernetesのこの時代。エンジニアとしてこれから学んでみようという方も多いと思います。
クラスメソッドでも「Kubernetesモクモク勉強会」を開催したりキャッチアップに励んでいますが、まじで学習コスト高杉くんだと思うんですよ。k8s。ホンマに。これ簡単とかいう人いたら、絶対信用したらあかん。
そんな敷居が高いKubernetesですが、モクモク勉強会でも推薦図書としていた「Kubernetes完全ガイド」が、「なにか本買って学ぶなら、これしかありえないでしょう」というぐらいの素晴らしい書籍だったので、ここにオススメさせていただきます。
(祭) ∧ ∧ Y ( ゚Д゚) Φ[_ソ__y_l〉 k8s マツリダワッショイ |_|_| し'´J
「Kubernetes2 Advent Calendar 2018」
この記事は、下記アドベントカレンダーの9日目の記事となります(公開ちょっと遅れてスイマセン…)
Kubernetes2 Advent Calendar 2018 - Qiita
「Kubernetes完全ガイド」の情報
著者
株式会社サイバーエージェント アドテク本部 青山 真也さん(@amsy810)
目次
- 第1章 Dockerの復習と「Hello, Kubernetes」
- 第2章 なぜKubernetesが必要なのか?
- 第3章 Kubernetes環境の選択肢
- 第4章 APIリソースとkubectl
- 第5章 Workloadsリソース
- 第6章 Discovery & LBリソース
- 第7章 Config & Storageリソース
- 第8章 ClusterリソースとMetadataリソース
- 第9章 リソース管理とオートスケーリング
- 第10章 ヘルスチェックとコンテナのライフサイクル
- 第11章 メンテナンスとノードの停止
- 第12章 高度で柔軟なスケジューリング
- 第13章 セキュリティ
- 第14章 マニフェストの汎用化を行うオープンソースソフトウェア
- 第15章 モニタリング
- 第16章 コンテナログの集約
- 第17章 Kubernetes環境でのCI/CD
- 第18章 マイクロサービスアーキテクチャとサービスメッシュ
- 第19章 Kubernetesのアーキテクチャを知る
- 第20章 Kubernetesとこれから
以降、自分が読んでいて心に残った点を中心に紹介していきます。
第1章 Dockerの復習と「Hello, Kubernetes」
Kubernetesのランタイムは現在Dockerが主流なわけですが、はっきり言ってこの本のDocker自体の解説は非常にあっさりしています。そのため、この章のDockerの復習も最低限の内容になっていて、チュートリアル的にDocker自身を学んでいくものではないことは予め理解しておいたほうが良いですね。
そもそもの想定読者が、Dockerやインフラ全般に関しての一定以上の知識を有する方向けになっているので、注意しておきましょう。
Kubernetesを学ぶ際に、そもそも「Dockerってなんやねん」という点を置き去りにしたまま中に入っていっても学習効率は良くないので、Docker自体もまだ不安だという方であれば、先に「Docker/Kubernetes 実践コンテナ開発入門 | 山田 明憲」などを読んで、基礎をおさえておくことをオススメいたします。
記述自体はあっさりしているのですが、マルチステージビルドの解説もあったり内容は充実しているので、ある程度知識がある方も、復習がてら一読するのが良いのではないでしょうか。
第2章 なぜKubernetesが必要なのか?〜第3章 Kubernetes環境の選択肢
Kubernetesが必要になった背景と、Kubernetesの考え方が記載されています。一番重要なのは、ここで、宣言的なコードによる管理について雰囲気を掴んでおくことです。
第3章では、Kubernetes環境種別毎に、代表的な環境が説明されています。
- ローカル系
- Minikube
- Docker for Mac
- 構築ツール
- Kubeadm
- Rancher
- パブリッククラウド
- GKE
- AKS
- EKS
パブリッククラウドの主要機能の差が面白い。自分は会社柄EKSは触ったことはあったんですが、GKEの便利機能(プリエンプティブルインスタンスを使ってのコスト削減方法や、GCPとの連携)などの概要も知ることができて参考になります。
(重要)第4章 APIリソースとkubectl
読み進めながら「この本、やべぇな…」と思い始めたのが、この第4章。Kubernetesを扱っていく上での、重要ポイントがきっちりとまとめられています。
リソースの概念からCLIツールkubectlの使い方、マニフェストファイルからのリソース作成の基本、kubectl applyを使うべき理由などが解説されている(これも重要)んですが、驚いたのが「マニフェストファイルの設計指針」のところ。
AWSのCloudFormationなども考え方似ていますが、宣言的にインフラを定義するInfrastructure as Codeの文脈では、その宣言ファイルをどの単位で構築するかは永遠の課題です。つまりは、宣言ファイルの分割単位が、そのまま開発・運用の効率に直結するんですね。この章では、そういった運用面での注意事項と、ディレクトリやマニフェストファイルの分割の仕方まで解説されています。
Kubernetesの機能紹介だけではなく、それを運用する上での一段踏み込んだ注意事項までもしっかりと解説されている、記述量の奥深さがこの本の一段素晴らしいところだと感じています。
第5章 Workloadsリソース
Kubernetesの中核をなす下記リソースについての解説です。超基本箇所なので、手を動かしながらしっかりと概念を頭になじませることをオススメします。
- Pod
- ReplicationController
- ReplicaSet
- Deployment
- DaemonSet
- StatefulSet
- Job
- CronJob
ここから、実際にコンテナ動かして動作確認とかできるので、触ってて楽しくなってくる所ですね。
第6章 Discovery & LBリソース 〜 第13章 セキュリティ
Kubernetesの各リソースについての詳細な解説です。Discovery & LBリソースや、Config & Storageリソースなどは必ず使うので目を通しておきたいところ。
このあたりは、全て前からしらみつぶしで読んでいくのも辛いかと思うので、自分が業務で直近利用が必要そうなリソースから順次調べて行くのが良いんじゃないでしょうか。もちろん記述内容も深くて、どこを読んでも参考になります。
第14章 マニフェストの汎用化を行うオープンソースソフトウェア
実際にシステム運用していくと、大量のマニフェストファイルの管理が辛くなってくるものですが、それを手助けしてくれるHelmとKsonnetの紹介です。この章からは、Kubernetes自体の機能の解説というよりは、その周辺エコシステムも交えた話になってきます。
最近は、Kubectlに統合される予定のKustomizeなんかも出てきていて、この周辺まだまだいろいろ出てきそうな状況ですが、マニフェストファイルの管理という視点ででてきたこういうツールが有るということを知るだけでも有用です。
第15章 モニタリング 〜 第16章 コンテナログの集約 〜 第17章 Kubernetes環境でのCI/CD
Kubernetesリソースの監視、ログの集約、CI/CD関連のツールが多数紹介されています。
- Datadog
- Prometheus
- fluentd
- Spinnaker
- Skaffold
- Jenkins X
- GitOps
現在もKubernetes周辺のエコシステムはむちゃくちゃ活発なので、全体の概要を抑えておきながらきになるものを触っていくためのきっかけになります。
第18章 マイクロサービスアーキテクチャとサービスメッシュ
マイクロサービスなアプリケーション実装において、その全体を管理するために必要なサービスメッシュの解説です。サービスメッシュって最近まで自分なんのことだかさっぱりわかってなかったんですが、マイクロサービスにおける管理上の難しさと痛み、およびサービスメッシュが解決してくれることを端的に説明してくれているので、「おー、こりゃあったほうがええ感じやな!」という気持ちが湧き上がってきます。
- Istio
- Conduit
- Linkerd
の解説があり、特にKubernetesではデファクトになりつつあるIstioは大きめに紹介されています。
第19章 Kubernetesのアーキテクチャを知る
普段、GKEやEKSなどパブリッククラウドでKubernetes環境構築するとき、マスターノードはマネージドでよしなにやってくれるのであまり意識しないんですが、Kubernetes自体のアーキテクチャの解説となっています。
ここまで書いてあるのは驚きですね… 自分まだぜんぜん読めてないんですが、内部構造まで踏み込んで解説されているのは素晴らしいと思います。
第20章 Kubernetesとこれから
最後の章では、Kubernetesの周辺をとりまく標準化の方向性についての解説です。もともと出自がCNCFのオープンなものであるKubernetesは、その他、イメージフォーマット、コンテナランタイム、コンテナストレージ、コンテナネットワーク関連の標準化が強力に推し進められています。
- OCI(Open Container Initiative)
- CRI(Container Runtime Interface)
- CSI(Container Storage Interface)
- CNI(Container Network Interface)
などなど。ランタイムにDocker以外のものが採用できるようになっていたり、ストレージとのインターフェースが共通化されようとしていたり、ネットワークインターフェースも共通化されようとしていたり。
そういった周辺エコシステムとの関連性と今後の進化の方向性が最後にまとめられています。
「Kubernetes学ぶならこれしかありえないレベルの一冊」
全編、Kubernetesに関する話題がこれでもかと詰め込まれた素晴らしい本です。Kubernetesは本体の技術要素も膨大かつ、その周辺を支えるエコシステムもアホみたいに充実しているので、正直学習コストはめちゃくちゃ高いです。そういった世界に飛び込んでいくときの相棒になってくれます。
読んでいて思うのは、記載内容のレベルが全般的に一段深いこと。各コマンドやリソースのリファレンス的な解説もありながら、その機能が必要とされる背景や使い方の注意点なども合わせて記載があるので、そこまで踏み込んで学習しておけば、解説されているコマンドがもし古くなったとしても、つぶしが効くという実感があります。
おそらくこういった本を買うときに「そのうちバージョンアップしてすぐ古くなるんじゃ…」という懸念をもつ人もいると思いますが、ぶっちゃけ、そういう躊躇する時間自体がもったいないかと。
Kubernetesの全体感をとらえながら、背景を理解しつつ手を動かして学ぶことができる本なので、書籍という媒体が嫌いでなければ、これからKubernetesを始める全ての人にオススメといえる本だと思います。
これが単著とかありえへんで…。青山さんに全力感謝です。
それでは、今日はこのへんで。濱田(@hamako9999)でした。